package main

import (
	"fmt"
	"os/exec"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/layout"
	"fyne.io/fyne/v2/widget"
)

// 设置环境变量
func (app *config) setEnv() func() {
	return func() {

		w := fyne.CurrentApp().NewWindow("设置环境变量")

		input := widget.NewEntry()
		input.SetText("Path")
		input.SetPlaceHolder("请输入变量名")
		input.Wrapping = 2     // 开启自动换行
		input.MultiLine = true //多行输入

		resultInput := widget.NewEntry()
		resultInput.SetPlaceHolder("请输入变量值")
		resultInput.Wrapping = 2     // 开启自动换行
		resultInput.MultiLine = true //多行输入

		startEncryptionBtn := widget.NewButton("确定", func() {
			fmt.Println(input.Text)
			fmt.Println(resultInput.Text)
			setSystemEnvVariable(input.Text, resultInput.Text)
			/* // 设置环境变量
			err := os.Setenv(input.Text, resultInput.Text)
			if err != nil {
				fmt.Println("Error setting environment variable:", err)
				// return
			} */
			/*
				// 验证环境变量是否已设置
				value, exists := os.LookupEnv("MY_VARIABLE")
				if exists {
					fmt.Println("MY_VARIABLE:", value)
				} else {
					fmt.Println("MY_VARIABLE is not set")
				} */
		})

		funcLayout := container.New(layout.NewHBoxLayout(), startEncryptionBtn)
		inputLayout := container.New(layout.NewVBoxLayout(), input, resultInput, funcLayout)
		allLayout := container.NewBorder(inputLayout, nil, nil, nil, nil)
		w.SetContent(allLayout)

		w.SetFixedSize(true) // 设置固定大小，避免用户拖动改变大小

		// start 监听主窗口的关闭事件
		// 前提是必须设置主窗口
		w.SetOnClosed(func() {
			w.Close()
		})
		// end 监听主窗口的关闭事件

		// 设置窗口大小,
		w.Resize(fyne.NewSize(450, 200))
		w.CenterOnScreen()
		w.Show()
	}
}
func setSystemEnvVariable(key, value string) error {
	// 构建 PowerShell 命令
	command := fmt.Sprintf("[Environment]::SetEnvironmentVariable('%s', '%s', 'Machine')", key, value)
	// 创建执行命令的对象
	cmd := exec.Command("powershell", "-Command", command)
	// 执行命令并获取输出
	output, err := cmd.CombinedOutput()
	if err != nil {
		// 若执行出错，打印错误信息和命令输出
		fmt.Printf("执行命令时出错: %v\n输出信息: %s\n", err, string(output))
		return err
	}
	return nil
}
